package DataStructure;

import java.util.ArrayList;
import java.util.List;

/**
 * 栈类型
 * @param <T> 栈中所存数据的类型
 */
public class CharStack<T> {
    //栈的数据部分
    private List<T> data;
    //栈底指针，指向下一个可用的位置
    private int pointer;

    public CharStack() {
        data = new ArrayList<T>();
        pointer = 0;
    }

    /**
     * 压栈
     * @param element 压入栈中的元素
     */
    public void push(T element) {
        data.add(pointer, element);
        pointer++;
    }

    /**
     * 出栈
     * @return 返回栈中的元素
     */
    public T pop() {
        pointer--;
        T pChar = data.get(pointer);
        data.remove(pointer);
        return pChar;
    }

    /**
     * 判断栈是否为空
     * @return true 表示空，false表示非空
     */
    public boolean isEmpty() {
        if (pointer == 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 在栈中元素的类型是char的时候，将栈中的元素组成字符串
     * @return 栈中元素组成的字符串
     * @throws Exception 栈中元素的类型不是char的时候 throw exception
     */
    public String getString() throws Exception {
        char[] temp = new char[pointer];
        if (data.get(0) instanceof Character) {
            for (int i = 0; i < pointer; i++) {
                temp[i] = (Character) data.get(i);
            }
            data.clear();
            String nString = String.valueOf(temp);
            pointer=0;
            return nString;
        }else{
            throw new Exception("T不是char类型的/T is not char");
        }

    }

    /**
     * 获取栈顶元素的值，但是让该元素出栈
     * @return 栈顶元素
     */
    public T tryLast() {
        return data.get(pointer-1);
    }

    /**
     * 获取栈中元素的个数
     * @return 个数
     */
    public int size(){
        return pointer;
    }

}
